package com.ruoyi.project.tool;

import java.util.Optional;

/**
 * 阿里云OSS文件名工具类
 */
public class OssFileNameUtil {

    // 固定的OSS前缀
    private static final String OSS_PREFIX = "https://xjksii81ks.oss-cn-beijing.aliyuncs.com/";

    /**
     * 从OSS URL中获取完整文件名（包含后缀）
     * @param ossUrl OSS文件URL
     * @return 文件名，如 "7c906107-3c41-4d1b-8b17-6065e78726a2.docx"
     */
    public static String getFileName(String ossUrl) {
        if (ossUrl == null || ossUrl.trim().isEmpty()) {
            return "";
        }

        // 移除固定前缀
        String cleanedUrl = removeOssPrefix(ossUrl);

        // 移除查询参数
        cleanedUrl = removeQueryParams(cleanedUrl);

        // 获取文件名
        return cleanedUrl;
        //return extractFileName(cleanedUrl);
    }

    /**
     * 获取文件名（不包含后缀）
     * @param ossUrl OSS文件URL
     * @return 纯文件名，如 "7c906107-3c41-4d1b-8b17-6065e78726a2"
     */
    public static String getFileNameWithoutExtension(String ossUrl) {
        String fileName = getFileName(ossUrl);
        if (fileName.isEmpty()) {
            return "";
        }

        int lastDotIndex = fileName.lastIndexOf('.');
        if (lastDotIndex > 0) {
            return fileName.substring(0, lastDotIndex);
        }

        return fileName;
    }

    /**
     * 获取文件后缀（不包含点）
     * @param ossUrl OSS文件URL
     * @return 文件后缀，如 "docx"
     */
    public static String getFileExtension(String ossUrl) {
        String fileName = getFileName(ossUrl);
        if (fileName.isEmpty()) {
            return "";
        }

        int lastDotIndex = fileName.lastIndexOf('.');
        if (lastDotIndex > 0 && lastDotIndex < fileName.length() - 1) {
            return fileName.substring(lastDotIndex + 1).toLowerCase();
        }

        return "";
    }

    /**
     * 获取文件后缀（包含点）
     * @param ossUrl OSS文件URL
     * @return 文件后缀，如 ".docx"
     */
    public static String getFileExtensionWithDot(String ossUrl) {
        String extension = getFileExtension(ossUrl);
        return extension.isEmpty() ? "" : "." + extension;
    }

    /**
     * 移除固定的OSS前缀
     */
    private static String removeOssPrefix(String url) {
        if (url.startsWith(OSS_PREFIX)) {
            return url.substring(OSS_PREFIX.length());
        }
        return url;
    }

    /**
     * 移除URL中的查询参数
     */
    private static String removeQueryParams(String url) {
        int queryIndex = url.indexOf('?');
        return queryIndex > 0 ? url.substring(0, queryIndex) : url;
    }

    /**
     * 从路径中提取文件名
     */
    private static String extractFileName(String path) {
        if (path == null || path.isEmpty()) {
            return "";
        }

        // 处理可能的多级目录
        int lastSlashIndex = path.lastIndexOf('/');
        if (lastSlashIndex != -1 && lastSlashIndex < path.length() - 1) {
            return path.substring(lastSlashIndex + 1);
        }

        return path;
    }

    /**
     * 检查是否是有效的OSS URL
     */
    public static boolean isValidOssUrl(String url) {
        return url != null && url.startsWith(OSS_PREFIX);
    }
}
